import axios from 'axios'
import { BaseUrl } from '../utils/index'

axios.defaults.baseURL = BaseUrl

axios.defaults.timeout = 10000;


// 请求拦截器
axios.interceptors.request.use(
  config => {
    // 每次发送请求之前判断是否存在token，如果存在，则统一在http请求的header都加上token，不用每次请求都手动添加了
    // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
    let info = JSON.parse(localStorage.getItem('info'));
    if(info && info.token){
      const tokens = 'Bearer ' + info.token;
      config.headers.Authorization = tokens;
    }
    return config;
  },
  error => {
    return Promise.error(error);
  });

// 响应拦截器
axios.interceptors.response.use(
  response => {
    if (response.status === 200) {
      return Promise.resolve(response);
    } else {
      return Promise.reject(response);
    }
  },
  // 服务器状态码不是200的情况
  error => {
    if (error.response.status) {
      switch (error.response.status) {
        case 401:
          console.log('未登录')
          break;
        case 404:
          console.log('网络请求不存在')
          break;
        default:
          console.log(error.response.data.message)
      }
      return Promise.reject(error.response);
    }
  }
);
/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 * @param {Number} is_id [请求时携带的参数]

 */
export function get(url, params,is_id) {
  let configUrl = is_id?url + '/' +is_id:url;
  return new Promise((resolve, reject) => {
    axios.get(configUrl, {
      params: params
    })
      .then(res => {
        resolve(res.data);
      })
      .catch(err => {
        reject(err.data)
      })
  });
}
/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 * @param {Number} is_id [请求时携带的参数]
 */
export function post(url, params,is_id) {
  let configUrl = is_id?url + '/' +is_id:url;

  return new Promise((resolve, reject) => {
    axios.post(configUrl, params)
      .then(res => {
        resolve(res.data);
      })
      .catch(err => {
        reject(err.data)
      })
  });
}

/**
 * put方法，对应put请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 * @param {Number} is_id [修改的id]
 */
export function put(url, params,is_id) {
  return new Promise((resolve, reject) => {
    axios.put(url+'/'+is_id, params)
      .then(res => {
        resolve(res.data);
      })
      .catch(err => {
        reject(err.data)
      })
  });
}

/**
 * delete方法，对应delete请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 * @param {Number} is_id [修改的id]
 */
export function del(url, params,is_id) {
  return new Promise((resolve, reject) => {
    axios.delete(url+'/'+is_id, params)
      .then(res => {
        resolve(res.data);
      })
      .catch(err => {
        reject(err.data)
      })
  });
}
